package com.linkgie.galaxyframework.process;

import java.util.Properties;

public interface ProcessDefinitionBuilder {

	/**
	 * 创建空白的流程定义流程编辑器；
	 * 
	 * @return
	 */
	default ProcessDefinitionEditor createEditor() {
		return createEditor("", null);
	}

	/**
	 * 根据已有的流程定义创建流程编辑器；
	 * 
	 * @param namespace            命名空间；可以为 null；
	 * @param properties 流程定义；如果为 null，则创建初始内容空白的流程编辑器；
	 * @return
	 */
	ProcessDefinitionEditor createEditor(String namespace, Properties properties);

	/**
	 * 根据已有的流程定义创建流程编辑器；
	 * 
	 * @param properties 流程定义；
	 * @return
	 */
	default ProcessDefinitionEditor createEditor(Properties properties) {
		return createEditor("", properties);
	}

	/**
	 * 解析流程定义；
	 * 
	 * @param namespace            命名空间；
	 * @param definitionProperties 流程定义；
	 * @return
	 */
	ProcessDefinition resolve(String namespace, Properties definitionProperties);
	
	/**
	 * 解析流程定义；
	 * 
	 * @param namespace            命名空间；
	 * @param definitionProperties 流程定义；
	 * @return
	 */
	default ProcessDefinition resolve(Properties definitionProperties) {
		return resolve("", definitionProperties);
	}
	
	/**
	 * 导出流程定义；
	 * 
	 * @param definition
	 * @return
	 */
	Properties export(ProcessDefinition definition, String namespace);

	/**
	 * 导出流程定义；
	 * 
	 * @param definition
	 * @return
	 */
	default Properties export(ProcessDefinition definition) {
		return export(definition, "");
	}

}
